Platform Explorer / Nuxeo Platform 2021.7

Component org.nuxeo.ecm.core.api.versioning.VersioningService

Documentation

The versioning service hold the versioning policy used to define what happens to a document's version when it is created, saved, checked in, checked out or restored, and what version increment options (none, minor, major) are made available to the user.

@Since 5.4

Aliases

  • org.nuxeo.ecm.core.versioning.VersioningService

Resolution Order

83
The resolution order represents the order in which this component has been resolved by the Nuxeo Runtime framework.
You can influence this order by adding "require" tags in your component declaration, to make sure it is resolved after another component.

Start Order

768
The start order represents the order in which this component has been started by the Nuxeo Runtime framework.
This number is interesting to tweak if your Java component interacts with other components, and needs to be started before or after another one.
It can be changed by implementing the method "Component#getApplicationStartedOrder()" on your Java component: components are sorted according to this reference value, in increasing order.
The default value is 1000, and the repository initialization uses number 100. Negative values can also be used.

Implementation

Class: org.nuxeo.ecm.core.versioning.VersioningComponent

Services

Extension Points

XML Source

<?xml version="1.0"?>
<component name="org.nuxeo.ecm.core.api.versioning.VersioningService">
  <alias>org.nuxeo.ecm.core.versioning.VersioningService</alias>

  <service>
    <provide interface="org.nuxeo.ecm.core.api.versioning.VersioningService" />
    <provide interface="org.nuxeo.ecm.core.versioning.VersioningService" />
  </service>

  <implementation class="org.nuxeo.ecm.core.versioning.VersioningComponent" />

  <documentation>
    The versioning service hold the versioning policy used to define what
    happens to a document's version when it is created, saved, checked in,
    checked out or restored, and what version increment options (none, minor,
    major) are made available to the user.

    @Since 5.4
  </documentation>

  <extension-point name="versioningService">
    <documentation>
      Extension point defining the implementation of the versioning policy.
      Example:

      <code>
        <service class="some-class" />
      </code>

      The provided class must implement
      org.nuxeo.ecm.core.api.versioning.VersioningService

      The default implementation is
      org.nuxeo.ecm.core.versioning.StandardVersioningService You can contribute
      org.nuxeo.ecm.core.versioning.CompatVersioningService to get pre-Nuxeo 5.4
      behavior.
    </documentation>

    <object class="org.nuxeo.ecm.core.versioning.VersioningServiceDescriptor" />

  </extension-point>

  <extension-point name="versioningRules">
    <documentation>
      CAUTION: Deprecated since 9.1, use policies, filters and restrictions extension points. Compatibility is provided,
      contribution to this endpoint will be converted to new contributions in order to preserve the initial state and
      options. The default contribution will be converted to a policy with an order equals to 10000, and each
      versioningRule will have an order equals to 10000 - idx where idx is the index of rule in VersioningComponent.

      Extension point defining default versioning rules or versioning rules by
      document type. Contributions to this XP are available for
      VersioningService implementing ExtendableVersioningService interface.

      Example:

      <code>
        <defaultVersioningRule>
          <initialState major="1" minor="0" />
          <options lifeCycleState="*">
            <none default="true" />
            <minor />
            <major />
          </options>
          <options lifeCycleState="approved">
            <none default="true" />
            <minor />
          </options>
        </defaultVersioningRule>

        <versioningRule typeName="File" enabled="true">
          <initialState major="1" minor="1" />
          <options lifeCycleState="project">
            <none />
            <minor default="true" />
          </options>
          <options lifeCycleState="approved" />
        </versioningRule>
      </code>

      The defaultVersioningRule will be used for all the document types if no
      specific versioningRule is contributed.

      typeName attribute is only available for versioningRule tag and should be
      the name of a document type.

      Initial state is the initial version number of the document. Default is
      0.0 .

      Options tag contains the different increment option available when saving
      a document. Only none, minor and major tags are used. If the default
      attribute isn't set, the first tag will be used as default. Options tag
      should always have the lifeCycleState attribute. The life cycle state name
      "*" can be used to match any state: it'll be used by default if no other
      option with a matching state exists.

      Following option gives no increment saving option when the current
      lifeCycle of the document is approved.
      <code>
        <options lifeCycleState="approved" />
      </code>

      Following options removes major increment option and set the minor
      increment option as default choice.
      <code>
        <options lifeCycleState="project">
          <none />
          <minor default="true" />
        </options>
      </code>

      If no option is specified, the defaultVersioningRule is used. If there is
      no defaultVersioningRule, we fall back on the service implementation.

      @Since 5.4.2
    </documentation>

    <object class="org.nuxeo.ecm.core.versioning.VersioningRuleDescriptor" />
    <object class="org.nuxeo.ecm.core.versioning.DefaultVersioningRuleDescriptor" />

  </extension-point>

  <extension-point name="policies">

    <documentation>
      Extension point defining versioning policies for documents.
      Contributions to this extension point are available for VersioningService
      implementing ExtendableVersioningService interface.

      Example:
      <code>
        <policy id="no-versioning-for-system-before-update" beforeUpdate="true" increment="NONE" order="1">
          <filter-id>system-document</filter-id>
        </policy>
        <policy id="no-versioning-for-system-after-update" increment="NONE" order="1">
          <filter-id>system-document</filter-id>
        </policy>
        <policy id="versioning-with-initial-version" increment="MINOR" order="2">
          <initialState major="1" minor="0" />
        </policy>
      </code>

      The beforeUpdate attribute enables, if set to true,
      to apply versioning before the actual update of the document.
      The default value for this attribute is false.

      The increment attribute defines which version number
      (minor or major) have to be incremented.
      The available options for this attribute are :
        - NONE
        - MINOR
        - MAJOR

      The order attribute defines in which order the policies
      should be taken into account. They are taken in ascending order.

      Initial state is the initial version number of the document.
      Default is 0.0.

      Each policy contains one or multiple filters
      defining under which conditions the document should be versioned
      (Note that filters for a policy are OR-ed).

      @since 9.1
    </documentation>

    <object class="org.nuxeo.ecm.core.versioning.VersioningPolicyDescriptor" />

  </extension-point>

  <extension-point name="filters">

    <documentation>
      Extension point defining filters which can be used
      by one or multiple versioning policies.
      Contributions to this extension point are available for VersioningService
      implementing ExtendableVersioningService interface.

      Example :
      <code>

        <filter id="class-filter" class="foo.bar.CustomVersioningFilter"/>

        <filter id="collaborative-filter-on-files">
          <type>File</type>
          <condition>#{previousDocument.dc.lastContributor != currentDocument.dc.lastContributor}</condition>
        </filter>

        <filter id="empty">
          <type></type>
          <facet></facet>
          <schema></schema>
          <condition></condition>
        </filter>
      </code>

      A custom filter can be defined with the class attribute
      if a java class should be used for the filter.
      Otherwise, a StandardVersioningFilter will be used
      with the following elements available:

       - The type element defines which document type will be versioned.

       - The facet/schema element defines that the document
         will be versioned if it contains the facet/schema.

       - The condition element enables creating
         a custom condition with an EL expression.

      Note that elements for a filter are AND-ed.

      @since 9.1
    </documentation>

    <object class="org.nuxeo.ecm.core.versioning.VersioningFilterDescriptor" />

  </extension-point>

  <extension-point name="restrictions">
    <documentation>
      Extension point defining restrictions of versioning option by document type. Contributions to this XP are
      available for VersioningService implementing ExtendableVersioningService interface.

      Example:

      <code>
        <restriction type="File">
          <options lifeCycleState="project">
            <option>NONE</option>
            <option default="true">MINOR</option>
          </options>
          <options lifeCycleState="approved" />
        </restriction>

        <restriction type="*">
          <options lifeCycleState="*">
            <option default="true">NONE</option>
            <option>MINOR</option>
            <option>MAJOR</option>
          </options>
          <options lifeCycleState="approved">
            <option default="true">NONE</option>
            <option>MINOR</option>
          </options>
        </restriction>
      </code>

      "type" attribute is available for restriction tag and should be the name of a document type.

      The restriction with type "*" will be used for all the document types if no specific restriction is contributed.

      Options tag contains the different increment option available when saving a document. If the default attribute
      isn't set, the first tag will be used as default. Options tag should always have the lifeCycleState attribute.
      The life cycle state name "*" can be used to match any state: it'll be used by default if no other option with
      a matching state exists.

      Following option gives no increment saving option when the current life cycle of the document is approved.
      <code>
        <options lifeCycleState="approved" />
      </code>

      Following options removes major increment option and set the minor increment option as default choice when the
      current life cycle of the document is projet.
      <code>
        <options lifeCycleState="project">
          <none />
          <minor default="true" />
        </options>
      </code>

      If no restriction is specified, the restriction with "*" is used. If there is no default restriction, we fall
      back on the service implementation (ie: none, minor and major options are available).

      @since 9.1
    </documentation>

    <object class="org.nuxeo.ecm.core.versioning.VersioningRestrictionDescriptor" />

  </extension-point>

</component>